//     Underscore.js 1.7.0
//     http://underscorejs.org
//     (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
//     Underscore may be freely distributed under the MIT license.
(function() {
    var n = this,
    t = n._,
    r = Array.prototype,
    e = Object.prototype,
    u = Function.prototype,
    i = r.push,
    a = r.slice,
    o = r.concat,
    l = e.toString,
    c = e.hasOwnProperty,
    f = Array.isArray,
    s = Object.keys,
    p = u.bind,
    h = function(n) {
        return n instanceof h ? n: this instanceof h ? void(this._wrapped = n) : new h(n)
    };
    "undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = h), exports._ = h) : n._ = h,
    h.VERSION = "1.7.0";
    var g = function(n, t, r) {
        if (t === void 0) return n;
        switch (null == r ? 3 : r) {
        case 1:
            return function(r) {
                return n.call(t, r)
            };
        case 2:
            return function(r, e) {
                return n.call(t, r, e)
            };
        case 3:
            return function(r, e, u) {
                return n.call(t, r, e, u)
            };
        case 4:
            return function(r, e, u, i) {
                return n.call(t, r, e, u, i)
            }
        }
        return function() {
            return n.apply(t, arguments)
        }
    };
    h.iteratee = function(n, t, r) {
        return null == n ? h.identity: h.isFunction(n) ? g(n, t, r) : h.isObject(n) ? h.matches(n) : h.property(n)
    },
    h.each = h.forEach = function(n, t, r) {
        if (null == n) return n;
        t = g(t, r);
        var e, u = n.length;
        if (u === +u) for (e = 0; u > e; e++) t(n[e], e, n);
        else {
            var i = h.keys(n);
            for (e = 0, u = i.length; u > e; e++) t(n[i[e]], i[e], n)
        }
        return n
    },
    h.map = h.collect = function(n, t, r) {
        if (null == n) return [];
        t = h.iteratee(t, r);
        for (var e, u = n.length !== +n.length && h.keys(n), i = (u || n).length, a = Array(i), o = 0; i > o; o++) e = u ? u[o] : o,
        a[o] = t(n[e], e, n);
        return a
    };
    var v = "Reduce of empty array with no initial value";
    h.reduce = h.foldl = h.inject = function(n, t, r, e) {
        null == n && (n = []),
        t = g(t, e, 4);
        var u, i = n.length !== +n.length && h.keys(n),
        a = (i || n).length,
        o = 0;
        if (arguments.length < 3) {
            if (!a) throw new TypeError(v);
            r = n[i ? i[o++] : o++]
        }
        for (; a > o; o++) u = i ? i[o] : o,
        r = t(r, n[u], u, n);
        return r
    },
    h.reduceRight = h.foldr = function(n, t, r, e) {
        null == n && (n = []),
        t = g(t, e, 4);
        var u, i = n.length !== +n.length && h.keys(n),
        a = (i || n).length;
        if (arguments.length < 3) {
            if (!a) throw new TypeError(v);
            r = n[i ? i[--a] : --a]
        }
        for (; a--;) u = i ? i[a] : a,
        r = t(r, n[u], u, n);
        return r
    },
    h.find = h.detect = function(n, t, r) {
        var e;
        return t = h.iteratee(t, r),
        h.some(n,
        function(n, r, u) {
            return t(n, r, u) ? (e = n, !0) : void 0
        }),
        e
    },
    h.filter = h.select = function(n, t, r) {
        var e = [];
        return null == n ? e: (t = h.iteratee(t, r), h.each(n,
        function(n, r, u) {
            t(n, r, u) && e.push(n)
        }), e)
    },
    h.reject = function(n, t, r) {
        return h.filter(n, h.negate(h.iteratee(t)), r)
    },
    h.every = h.all = function(n, t, r) {
        if (null == n) return ! 0;
        t = h.iteratee(t, r);
        var e, u, i = n.length !== +n.length && h.keys(n),
        a = (i || n).length;
        for (e = 0; a > e; e++) if (u = i ? i[e] : e, !t(n[u], u, n)) return ! 1;
        return ! 0
    },
    h.some = h.any = function(n, t, r) {
        if (null == n) return ! 1;
        t = h.iteratee(t, r);
        var e, u, i = n.length !== +n.length && h.keys(n),
        a = (i || n).length;
        for (e = 0; a > e; e++) if (u = i ? i[e] : e, t(n[u], u, n)) return ! 0;
        return ! 1
    },
    h.contains = h.include = function(n, t) {
        return null == n ? !1 : (n.length !== +n.length && (n = h.values(n)), h.indexOf(n, t) >= 0)
    },
    h.invoke = function(n, t) {
        var r = a.call(arguments, 2),
        e = h.isFunction(t);
        return h.map(n,
        function(n) {
            return (e ? t: n[t]).apply(n, r)
        })
    },
    h.pluck = function(n, t) {
        return h.map(n, h.property(t))
    },
    h.where = function(n, t) {
        return h.filter(n, h.matches(t))
    },
    h.findWhere = function(n, t) {
        return h.find(n, h.matches(t))
    },
    h.max = function(n, t, r) {
        var e, u, i = -1 / 0,
        a = -1 / 0;
        if (null == t && null != n) {
            n = n.length === +n.length ? n: h.values(n);
            for (var o = 0,
            l = n.length; l > o; o++) e = n[o],
            e > i && (i = e)
        } else t = h.iteratee(t, r),
        h.each(n,
        function(n, r, e) {
            u = t(n, r, e),
            (u > a || u === -1 / 0 && i === -1 / 0) && (i = n, a = u)
        });
        return i
    },
    h.min = function(n, t, r) {
        var e, u, i = 1 / 0,
        a = 1 / 0;
        if (null == t && null != n) {
            n = n.length === +n.length ? n: h.values(n);
            for (var o = 0,
            l = n.length; l > o; o++) e = n[o],
            i > e && (i = e)
        } else t = h.iteratee(t, r),
        h.each(n,
        function(n, r, e) {
            u = t(n, r, e),
            (a > u || 1 / 0 === u && 1 / 0 === i) && (i = n, a = u)
        });
        return i
    },
    h.shuffle = function(n) {
        for (var t, r = n && n.length === +n.length ? n: h.values(n), e = r.length, u = Array(e), i = 0; e > i; i++) t = h.random(0, i),
        t !== i && (u[i] = u[t]),
        u[t] = r[i];
        return u
    },
    h.sample = function(n, t, r) {
        return null == t || r ? (n.length !== +n.length && (n = h.values(n)), n[h.random(n.length - 1)]) : h.shuffle(n).slice(0, Math.max(0, t))
    },
    h.sortBy = function(n, t, r) {
        return t = h.iteratee(t, r),
        h.pluck(h.map(n,
        function(n, r, e) {
            return {
                value: n,
                index: r,
                criteria: t(n, r, e)
            }
        }).sort(function(n, t) {
            var r = n.criteria,
            e = t.criteria;
            if (r !== e) {
                if (r > e || r === void 0) return 1;
                if (e > r || e === void 0) return - 1
            }
            return n.index - t.index
        }), "value")
    };
    var m = function(n) {
        return function(t, r, e) {
            var u = {};
            return r = h.iteratee(r, e),
            h.each(t,
            function(e, i) {
                var a = r(e, i, t);
                n(u, e, a)
            }),
            u
        }
    };
    h.groupBy = m(function(n, t, r) {
        h.has(n, r) ? n[r].push(t) : n[r] = [t]
    }),
    h.indexBy = m(function(n, t, r) {
        n[r] = t
    }),
    h.countBy = m(function(n, t, r) {
        h.has(n, r) ? n[r]++:n[r] = 1
    }),
    h.sortedIndex = function(n, t, r, e) {
        r = h.iteratee(r, e, 1);
        for (var u = r(t), i = 0, a = n.length; a > i;) {
            var o = i + a >>> 1;
            r(n[o]) < u ? i = o + 1 : a = o
        }
        return i
    },
    h.toArray = function(n) {
        return n ? h.isArray(n) ? a.call(n) : n.length === +n.length ? h.map(n, h.identity) : h.values(n) : []
    },
    h.size = function(n) {
        return null == n ? 0 : n.length === +n.length ? n.length: h.keys(n).length
    },
    h.partition = function(n, t, r) {
        t = h.iteratee(t, r);
        var e = [],
        u = [];
        return h.each(n,
        function(n, r, i) { (t(n, r, i) ? e: u).push(n)
        }),
        [e, u]
    },
    h.first = h.head = h.take = function(n, t, r) {
        return null == n ? void 0 : null == t || r ? n[0] : 0 > t ? [] : a.call(n, 0, t)
    },
    h.initial = function(n, t, r) {
        return a.call(n, 0, Math.max(0, n.length - (null == t || r ? 1 : t)))
    },
    h.last = function(n, t, r) {
        return null == n ? void 0 : null == t || r ? n[n.length - 1] : a.call(n, Math.max(n.length - t, 0))
    },
    h.rest = h.tail = h.drop = function(n, t, r) {
        return a.call(n, null == t || r ? 1 : t)
    },
    h.compact = function(n) {
        return h.filter(n, h.identity)
    };
    var y = function(n, t, r, e) {
        if (t && h.every(n, h.isArray)) return o.apply(e, n);
        for (var u = 0,
        a = n.length; a > u; u++) {
            var l = n[u];
            h.isArray(l) || h.isArguments(l) ? t ? i.apply(e, l) : y(l, t, r, e) : r || e.push(l)
        }
        return e
    };
    h.flatten = function(n, t) {
        return y(n, t, !1, [])
    },
    h.without = function(n) {
        return h.difference(n, a.call(arguments, 1))
    },
    h.uniq = h.unique = function(n, t, r, e) {
        if (null == n) return [];
        h.isBoolean(t) || (e = r, r = t, t = !1),
        null != r && (r = h.iteratee(r, e));
        for (var u = [], i = [], a = 0, o = n.length; o > a; a++) {
            var l = n[a];
            if (t) a && i === l || u.push(l),
            i = l;
            else if (r) {
                var c = r(l, a, n);
                h.indexOf(i, c) < 0 && (i.push(c), u.push(l))
            } else h.indexOf(u, l) < 0 && u.push(l)
        }
        return u
    },
    h.union = function() {
        return h.uniq(y(arguments, !0, !0, []))
    },
    h.intersection = function(n) {
        if (null == n) return [];
        for (var t = [], r = arguments.length, e = 0, u = n.length; u > e; e++) {
            var i = n[e];
            if (!h.contains(t, i)) {
                for (var a = 1; r > a && h.contains(arguments[a], i); a++);
                a === r && t.push(i)
            }
        }
        return t
    },
    h.difference = function(n) {
        var t = y(a.call(arguments, 1), !0, !0, []);
        return h.filter(n,
        function(n) {
            return ! h.contains(t, n)
        })
    },
    h.zip = function(n) {
        if (null == n) return [];
        for (var t = h.max(arguments, "length").length, r = Array(t), e = 0; t > e; e++) r[e] = h.pluck(arguments, e);
        return r
    },
    h.object = function(n, t) {
        if (null == n) return {};
        for (var r = {},
        e = 0,
        u = n.length; u > e; e++) t ? r[n[e]] = t[e] : r[n[e][0]] = n[e][1];
        return r
    },
    h.indexOf = function(n, t, r) {
        if (null == n) return - 1;
        var e = 0,
        u = n.length;
        if (r) {
            if ("number" != typeof r) return e = h.sortedIndex(n, t),
            n[e] === t ? e: -1;
            e = 0 > r ? Math.max(0, u + r) : r
        }
        for (; u > e; e++) if (n[e] === t) return e;
        return - 1
    },
    h.lastIndexOf = function(n, t, r) {
        if (null == n) return - 1;
        var e = n.length;
        for ("number" == typeof r && (e = 0 > r ? e + r + 1 : Math.min(e, r + 1)); --e >= 0;) if (n[e] === t) return e;
        return - 1
    },
    h.range = function(n, t, r) {
        arguments.length <= 1 && (t = n || 0, n = 0),
        r = r || 1;
        for (var e = Math.max(Math.ceil((t - n) / r), 0), u = Array(e), i = 0; e > i; i++, n += r) u[i] = n;
        return u
    };
    var d = function() {};
    h.bind = function(n, t) {
        var r, e;
        if (p && n.bind === p) return p.apply(n, a.call(arguments, 1));
        if (!h.isFunction(n)) throw new TypeError("Bind must be called on a function");
        return r = a.call(arguments, 2),
        e = function() {
            if (! (this instanceof e)) return n.apply(t, r.concat(a.call(arguments)));
            d.prototype = n.prototype;
            var u = new d;
            d.prototype = null;
            var i = n.apply(u, r.concat(a.call(arguments)));
            return h.isObject(i) ? i: u
        }
    },
    h.partial = function(n) {
        var t = a.call(arguments, 1);
        return function() {
            for (var r = 0,
            e = t.slice(), u = 0, i = e.length; i > u; u++) e[u] === h && (e[u] = arguments[r++]);
            for (; r < arguments.length;) e.push(arguments[r++]);
            return n.apply(this, e)
        }
    },
    h.bindAll = function(n) {
        var t, r, e = arguments.length;
        if (1 >= e) throw new Error("bindAll must be passed function names");
        for (t = 1; e > t; t++) r = arguments[t],
        n[r] = h.bind(n[r], n);
        return n
    },
    h.memoize = function(n, t) {
        var r = function(e) {
            var u = r.cache,
            i = t ? t.apply(this, arguments) : e;
            return h.has(u, i) || (u[i] = n.apply(this, arguments)),
            u[i]
        };
        return r.cache = {},
        r
    },
    h.delay = function(n, t) {
        var r = a.call(arguments, 2);
        return setTimeout(function() {
            return n.apply(null, r)
        },
        t)
    },
    h.defer = function(n) {
        return h.delay.apply(h, [n, 1].concat(a.call(arguments, 1)))
    },
    h.throttle = function(n, t, r) {
        var e, u, i, a = null,
        o = 0;
        r || (r = {});
        var l = function() {
            o = r.leading === !1 ? 0 : h.now(),
            a = null,
            i = n.apply(e, u),
            a || (e = u = null)
        };
        return function() {
            var c = h.now();
            o || r.leading !== !1 || (o = c);
            var f = t - (c - o);
            return e = this,
            u = arguments,
            0 >= f || f > t ? (clearTimeout(a), a = null, o = c, i = n.apply(e, u), a || (e = u = null)) : a || r.trailing === !1 || (a = setTimeout(l, f)),
            i
        }
    },
    h.debounce = function(n, t, r) {
        var e, u, i, a, o, l = function() {
            var c = h.now() - a;
            t > c && c > 0 ? e = setTimeout(l, t - c) : (e = null, r || (o = n.apply(i, u), e || (i = u = null)))
        };
        return function() {
            i = this,
            u = arguments,
            a = h.now();
            var c = r && !e;
            return e || (e = setTimeout(l, t)),
            c && (o = n.apply(i, u), i = u = null),
            o
        }
    },
    h.wrap = function(n, t) {
        return h.partial(t, n)
    },
    h.negate = function(n) {
        return function() {
            return ! n.apply(this, arguments)
        }
    },
    h.compose = function() {
        var n = arguments,
        t = n.length - 1;
        return function() {
            for (var r = t,
            e = n[t].apply(this, arguments); r--;) e = n[r].call(this, e);
            return e
        }
    },
    h.after = function(n, t) {
        return function() {
            return--n < 1 ? t.apply(this, arguments) : void 0
        }
    },
    h.before = function(n, t) {
        var r;
        return function() {
            return--n > 0 ? r = t.apply(this, arguments) : t = null,
            r
        }
    },
    h.once = h.partial(h.before, 2),
    h.keys = function(n) {
        if (!h.isObject(n)) return [];
        if (s) return s(n);
        var t = [];
        for (var r in n) h.has(n, r) && t.push(r);
        return t
    },
    h.values = function(n) {
        for (var t = h.keys(n), r = t.length, e = Array(r), u = 0; r > u; u++) e[u] = n[t[u]];
        return e
    },
    h.pairs = function(n) {
        for (var t = h.keys(n), r = t.length, e = Array(r), u = 0; r > u; u++) e[u] = [t[u], n[t[u]]];
        return e
    },
    h.invert = function(n) {
        for (var t = {},
        r = h.keys(n), e = 0, u = r.length; u > e; e++) t[n[r[e]]] = r[e];
        return t
    },
    h.functions = h.methods = function(n) {
        var t = [];
        for (var r in n) h.isFunction(n[r]) && t.push(r);
        return t.sort()
    },
    h.extend = function(n) {
        if (!h.isObject(n)) return n;
        for (var t, r, e = 1,
        u = arguments.length; u > e; e++) {
            t = arguments[e];
            for (r in t) c.call(t, r) && (n[r] = t[r])
        }
        return n
    },
    h.pick = function(n, t, r) {
        var e, u = {};
        if (null == n) return u;
        if (h.isFunction(t)) {
            t = g(t, r);
            for (e in n) {
                var i = n[e];
                t(i, e, n) && (u[e] = i)
            }
        } else {
            var l = o.apply([], a.call(arguments, 1));
            n = new Object(n);
            for (var c = 0,
            f = l.length; f > c; c++) e = l[c],
            e in n && (u[e] = n[e])
        }
        return u
    },
    h.omit = function(n, t, r) {
        if (h.isFunction(t)) t = h.negate(t);
        else {
            var e = h.map(o.apply([], a.call(arguments, 1)), String);
            t = function(n, t) {
                return ! h.contains(e, t)
            }
        }
        return h.pick(n, t, r)
    },
    h.defaults = function(n) {
        if (!h.isObject(n)) return n;
        for (var t = 1,
        r = arguments.length; r > t; t++) {
            var e = arguments[t];
            for (var u in e) n[u] === void 0 && (n[u] = e[u])
        }
        return n
    },
    h.clone = function(n) {
        return h.isObject(n) ? h.isArray(n) ? n.slice() : h.extend({},
        n) : n
    },
    h.tap = function(n, t) {
        return t(n),
        n
    };
    var b = function(n, t, r, e) {
        if (n === t) return 0 !== n || 1 / n === 1 / t;
        if (null == n || null == t) return n === t;
        n instanceof h && (n = n._wrapped),
        t instanceof h && (t = t._wrapped);
        var u = l.call(n);
        if (u !== l.call(t)) return ! 1;
        switch (u) {
        case "[object RegExp]":
        case "[object String]":
            return "" + n == "" + t;
        case "[object Number]":
            return + n !== +n ? +t !== +t: 0 === +n ? 1 / +n === 1 / t: +n === +t;
        case "[object Date]":
        case "[object Boolean]":
            return + n === +t
        }
        if ("object" != typeof n || "object" != typeof t) return ! 1;
        for (var i = r.length; i--;) if (r[i] === n) return e[i] === t;
        var a = n.constructor,
        o = t.constructor;
        if (a !== o && "constructor" in n && "constructor" in t && !(h.isFunction(a) && a instanceof a && h.isFunction(o) && o instanceof o)) return ! 1;
        r.push(n),
        e.push(t);
        var c, f;
        if ("[object Array]" === u) {
            if (c = n.length, f = c === t.length) for (; c--&&(f = b(n[c], t[c], r, e)););
        } else {
            var s, p = h.keys(n);
            if (c = p.length, f = h.keys(t).length === c) for (; c--&&(s = p[c], f = h.has(t, s) && b(n[s], t[s], r, e)););
        }
        return r.pop(),
        e.pop(),
        f
    };
    h.isEqual = function(n, t) {
        return b(n, t, [], [])
    },
    h.isEmpty = function(n) {
        if (null == n) return ! 0;
        if (h.isArray(n) || h.isString(n) || h.isArguments(n)) return 0 === n.length;
        for (var t in n) if (h.has(n, t)) return ! 1;
        return ! 0
    },
    h.isElement = function(n) {
        return ! (!n || 1 !== n.nodeType)
    },
    h.isArray = f ||
    function(n) {
        return "[object Array]" === l.call(n)
    },
    h.isObject = function(n) {
        var t = typeof n;
        return "function" === t || "object" === t && !!n
    },
    h.each(["Arguments", "Function", "String", "Number", "Date", "RegExp"],
    function(n) {
        h["is" + n] = function(t) {
            return l.call(t) === "[object " + n + "]"
        }
    }),
    h.isArguments(arguments) || (h.isArguments = function(n) {
        return h.has(n, "callee")
    }),
    "function" != typeof / . / &&(h.isFunction = function(n) {
        return "function" == typeof n || !1
    }),
    h.isFinite = function(n) {
        return isFinite(n) && !isNaN(parseFloat(n))
    },
    h.isNaN = function(n) {
        return h.isNumber(n) && n !== +n
    },
    h.isBoolean = function(n) {
        return n === !0 || n === !1 || "[object Boolean]" === l.call(n)
    },
    h.isNull = function(n) {
        return null === n
    },
    h.isUndefined = function(n) {
        return n === void 0
    },
    h.has = function(n, t) {
        return null != n && c.call(n, t)
    },
    h.noConflict = function() {
        return n._ = t,
        this
    },
    h.identity = function(n) {
        return n
    },
    h.constant = function(n) {
        return function() {
            return n
        }
    },
    h.noop = function() {},
    h.property = function(n) {
        return function(t) {
            return t[n]
        }
    },
    h.matches = function(n) {
        var t = h.pairs(n),
        r = t.length;
        return function(n) {
            if (null == n) return ! r;
            n = new Object(n);
            for (var e = 0; r > e; e++) {
                var u = t[e],
                i = u[0];
                if (u[1] !== n[i] || !(i in n)) return ! 1
            }
            return ! 0
        }
    },
    h.times = function(n, t, r) {
        var e = Array(Math.max(0, n));
        t = g(t, r, 1);
        for (var u = 0; n > u; u++) e[u] = t(u);
        return e
    },
    h.random = function(n, t) {
        return null == t && (t = n, n = 0),
        n + Math.floor(Math.random() * (t - n + 1))
    },
    h.now = Date.now ||
    function() {
        return (new Date).getTime()
    };
    var _ = {
        "&": "&amp;",
        "<": "&lt;",
        ">": "&gt;",
        '"': "&quot;",
        "'": "&#x27;",
        "`": "&#x60;"
    },
    w = h.invert(_),
    j = function(n) {
        var t = function(t) {
            return n[t]
        },
        r = "(?:" + h.keys(n).join("|") + ")",
        e = RegExp(r),
        u = RegExp(r, "g");
        return function(n) {
            return n = null == n ? "": "" + n,
            e.test(n) ? n.replace(u, t) : n
        }
    };
    h.escape = j(_),
    h.unescape = j(w),
    h.result = function(n, t) {
        if (null == n) return void 0;
        var r = n[t];
        return h.isFunction(r) ? n[t]() : r
    };
    var x = 0;
    h.uniqueId = function(n) {
        var t = ++x + "";
        return n ? n + t: t
    },
    h.templateSettings = {
        evaluate: /<%([\s\S]+?)%>/g,
        interpolate: /<%=([\s\S]+?)%>/g,
        escape: /<%-([\s\S]+?)%>/g
    };
    var A = /(.)^/,
    k = {
        "'": "'",
        "\\": "\\",
        "\r": "r",
        "\n": "n",
        "\u2028": "u2028",
        "\u2029": "u2029"
    },
    O = /\\|'|\r|\n|\u2028|\u2029/g,
    F = function(n) {
        return "\\" + k[n]
    };
    h.template = function(n, t, r) { ! t && r && (t = r),
        t = h.defaults({},
        t, h.templateSettings);
        var e = RegExp([(t.escape || A).source, (t.interpolate || A).source, (t.evaluate || A).source].join("|") + "|$", "g"),
        u = 0,
        i = "__p+='";
        n.replace(e,
        function(t, r, e, a, o) {
            return i += n.slice(u, o).replace(O, F),
            u = o + t.length,
            r ? i += "'+\n((__t=(" + r + "))==null?'':_.escape(__t))+\n'": e ? i += "'+\n((__t=(" + e + "))==null?'':__t)+\n'": a && (i += "';\n" + a + "\n__p+='"),
            t
        }),
        i += "';\n",
        t.variable || (i = "with(obj||{}){\n" + i + "}\n"),
        i = "var __t,__p='',__j=Array.prototype.join," + "print=function(){__p+=__j.call(arguments,'');};\n" + i + "return __p;\n";
        try {
            var a = new Function(t.variable || "obj", "_", i)
        } catch(o) {
            throw o.source = i,
            o
        }
        var l = function(n) {
            return a.call(this, n, h)
        },
        c = t.variable || "obj";
        return l.source = "function(" + c + "){\n" + i + "}",
        l
    },
    h.chain = function(n) {
        var t = h(n);
        return t._chain = !0,
        t
    };
    var E = function(n) {
        return this._chain ? h(n).chain() : n
    };
    h.mixin = function(n) {
        h.each(h.functions(n),
        function(t) {
            var r = h[t] = n[t];
            h.prototype[t] = function() {
                var n = [this._wrapped];
                return i.apply(n, arguments),
                E.call(this, r.apply(h, n))
            }
        })
    },
    h.mixin(h),
    h.each(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"],
    function(n) {
        var t = r[n];
        h.prototype[n] = function() {
            var r = this._wrapped;
            return t.apply(r, arguments),
            "shift" !== n && "splice" !== n || 0 !== r.length || delete r[0],
            E.call(this, r)
        }
    }),
    h.each(["concat", "join", "slice"],
    function(n) {
        var t = r[n];
        h.prototype[n] = function() {
            return E.call(this, t.apply(this._wrapped, arguments))
        }
    }),
    h.prototype.value = function() {
        return this._wrapped
    },
    "function" == typeof define && define.amd && define("underscore", [],
    function() {
        return h
    })
}).call(this);
// # sourceMappingURL=underscore-min.map
